﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestorDeFlotas.Core;
using System.Data.SqlClient;
using GestorDeFlotasDesktop.GD1C2012DataSetTableAdapters;


namespace GestorDeFlotasDesktop.AbmTurno
{
    public partial class AbmTurno : FormABMBase
    {
        public Turno MyTurno { get; set; }

        public AbmTurno(ModoAbm modoAbm)
            : base(modoAbm)
        {
            InitializeComponent();
        }
        DataTable dt = new DataTable();
        DataTable dtBackup = new DataTable();
        bool DatosGuardados = true;
           
        private void AbmTurno_Load(object sender, EventArgs e)
        {
            Turno turnoAux = new Turno();
            dt = turnoAux.CargarTabla("%%");
            grdTurnos.DataSource = dt;
            dtBackup = dt.Clone();
            
            foreach (DataRow dr in dt.Rows)
            {
                dtBackup.ImportRow(dr);
            }
      
            this.HabilitarControles();
        }

        private void HabilitarControles()
        {
            this.btnSeleccionar.Visible = this.modoAbm == ModoAbm.Consulta;
            this.button_crear.Visible = this.modoAbm != ModoAbm.Consulta;
            this.button_guardar.Visible = this.modoAbm != ModoAbm.Consulta;
            this.grdTurnos.Columns["seleccionar_turno"].Visible = this.modoAbm != ModoAbm.Consulta;
            this.grdTurnos.Columns["eliminar_turno"].Visible = this.modoAbm != ModoAbm.Consulta;
        }

        private void button_limpiar_Click(object sender, EventArgs e)
        {
            bool limpiar = true;
            if (!DatosGuardados)
            {
                DialogResult result = MessageBox.Show("¿Desea buscar de todos modos?", "Los cambios aun no han sido guardados", MessageBoxButtons.OKCancel);
                limpiar = true;
                switch (result)
                {
                    case DialogResult.OK:
                        {
                            limpiar = true;

                        }
                        break;

                    case DialogResult.Cancel:
                        {
                            limpiar = false;
                        }
                        break;
                }
            }
            if (limpiar)
            {
                textBox_descripcion.Clear();
                Turno turnoAux = new Turno();
                dt = turnoAux.CargarTabla("%%");
                grdTurnos.DataSource = dt;
                DatosGuardados = true;
            }
        }

        private void button_buscar_Click(object sender, EventArgs e)
        {
            bool buscar = true;
            if (!DatosGuardados)
            {
                DialogResult result = MessageBox.Show("¿Desea buscar de todos modos?", "Los cambios aun no han sido guardados", MessageBoxButtons.OKCancel);
                buscar = true;
                switch (result)
                {
                    case DialogResult.OK:
                        {
                            buscar = true;

                        }
                        break;

                    case DialogResult.Cancel:
                        {
                            buscar = false;
                        }
                        break;
                }
            }
            if (buscar)
            {
                string Desc = string.Format("%{0}%", this.textBox_descripcion.Text);

                Turno turnoAux = new Turno();
                dt = turnoAux.CargarTabla(Desc);
                grdTurnos.DataSource = dt;
                DatosGuardados = true;
            }
            
 
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int RowIndex = 0;
            if (e.RowIndex < 0 || (e.ColumnIndex !=
                   grdTurnos.Columns["seleccionar_turno"].Index && e.ColumnIndex != grdTurnos.Columns["eliminar_turno"].Index)) return;
                    
            
            //cargo el turno a partir de la grilla
            Turno MiTurnoActual = new Turno();
            MiTurnoActual.Id = (int)grdTurnos["tur_id", e.RowIndex].Value;
            MiTurnoActual.horaInicio = (decimal)(grdTurnos["tur_hora_inicio", e.RowIndex].Value);
            MiTurnoActual.horaFin = (decimal)(grdTurnos["tur_hora_fin", e.RowIndex].Value);
            MiTurnoActual.valorFicha = (decimal)(grdTurnos["tur_valor_ficha", e.RowIndex].Value);
            MiTurnoActual.valorBandera = (decimal)(grdTurnos["tur_valor_bandera", e.RowIndex].Value);
            MiTurnoActual.Descripcion = grdTurnos["tur_descripcion", e.RowIndex].Value.ToString();
            MiTurnoActual.Activo = (bool)(grdTurnos["tur_activo", e.RowIndex].Value);
                
            if (e.ColumnIndex == grdTurnos.Columns["seleccionar_turno"].Index)
            {
                DatosTurno datosTurno = new DatosTurno(ModoAbm.Modificacion, MiTurnoActual);
                if (datosTurno.ShowDialog() == DialogResult.OK)
                {
                    RowIndex = 0;
                              
                    foreach (DataRow row in dtBackup.Rows)
                    {
                        if (MiTurnoActual.Id == Convert.ToInt32(row[6]))
                        {
                            dtBackup.Rows[RowIndex]["tur_hora_inicio"] = MiTurnoActual.horaInicio;
                            dtBackup.Rows[RowIndex]["tur_hora_fin"] = MiTurnoActual.horaFin;
                            dtBackup.Rows[RowIndex]["tur_descripcion"] = MiTurnoActual.Descripcion;
                            dtBackup.Rows[RowIndex]["tur_valor_ficha"] = MiTurnoActual.valorFicha;
                            dtBackup.Rows[RowIndex]["tur_valor_bandera"] = MiTurnoActual.valorBandera;
                            dtBackup.Rows[RowIndex]["tur_id"] = MiTurnoActual.Id;
                            dtBackup.Rows[RowIndex]["tur_activo"] = MiTurnoActual.Activo;
                        }
                        RowIndex ++;
                    }

                    dt.Rows[e.RowIndex]["tur_hora_inicio"] = MiTurnoActual.horaInicio;
                    dt.Rows[e.RowIndex]["tur_hora_fin"] = MiTurnoActual.horaFin;
                    dt.Rows[e.RowIndex]["tur_descripcion"] = MiTurnoActual.Descripcion;
                    dt.Rows[e.RowIndex]["tur_valor_ficha"] = MiTurnoActual.valorFicha;
                    dt.Rows[e.RowIndex]["tur_valor_bandera"] = MiTurnoActual.valorBandera;
                    dt.Rows[e.RowIndex]["tur_id"] = MiTurnoActual.Id;
                    dt.Rows[e.RowIndex]["tur_activo"] = MiTurnoActual.Activo;
                    DatosGuardados = false;
                   
                }
            }
            else if (e.ColumnIndex == grdTurnos.Columns["eliminar_turno"].Index)
            {
                RowIndex = 0;
                if ((Boolean)dt.Rows[e.RowIndex]["tur_activo"])
                {
                    RowIndex = 0;

                    foreach (DataRow row in dtBackup.Rows)
                    {
                        if (MiTurnoActual.Id == Convert.ToInt32(row[6]))
                        {
                              dtBackup.Rows[RowIndex]["tur_activo"] = false;
                        }
                        RowIndex++;
                    }

                    dt.Rows[e.RowIndex]["tur_activo"] = false;
         
                }
                DatosGuardados = false;
            }
        }

        private void button_cerrar_Click(object sender, EventArgs e)
        {
            if (!DatosGuardados)
            {
                DialogResult result = MessageBox.Show("¿Desea salir de todos modos?", "Los cambios aun no han sido guardados", MessageBoxButtons.OKCancel);
                bool salir = true;
                switch (result)
                {
                    case DialogResult.OK:
                        {
                            salir = true;

                        }
                        break;

                    case DialogResult.Cancel:
                        {
                            salir = false;
                        }
                        break;
                }
                if (salir)
                {
                    this.Close();
                }
            }
            else
            {
                this.Close();
            }
        }

        private void button_crear_Click(object sender, EventArgs e)
        {
            Turno MiTurnoActual = new Turno();
            DatosTurno datosTurno = new DatosTurno(ModoAbm.Alta, MiTurnoActual);
            if (datosTurno.ShowDialog() == DialogResult.OK)
            {
                DataRow row = dt.NewRow();
                row["tur_id"] = (int)dtBackup.Rows.Count + 1;
                row["tur_hora_inicio"] = MiTurnoActual.horaInicio;
                row["tur_hora_fin"] = MiTurnoActual.horaFin;
                row["tur_valor_ficha"] = MiTurnoActual.valorFicha;
                row["tur_valor_bandera"] = MiTurnoActual.valorBandera;
                row["tur_descripcion"] = MiTurnoActual.Descripcion;
                row["tur_activo"] = MiTurnoActual.Activo;
                dt.Rows.Add(row);
                grdTurnos.DataSource = dt;

                DataRow row1 = dtBackup.NewRow();
                row1["tur_id"] = (int)dtBackup.Rows.Count + 1;
                row1["tur_hora_inicio"] = MiTurnoActual.horaInicio;
                row1["tur_hora_fin"] = MiTurnoActual.horaFin;
                row1["tur_valor_ficha"] = MiTurnoActual.valorFicha;
                row1["tur_valor_bandera"] = MiTurnoActual.valorBandera;
                row1["tur_descripcion"] = MiTurnoActual.Descripcion;
                row1["tur_activo"] = MiTurnoActual.Activo;
                dtBackup.Rows.Add(row1);
                DatosGuardados = false;
        
            }
        }

        private void button_guardar_Click(object sender, EventArgs e)
        {
            if (Check_Turnos())
            {
                foreach (DataRow row in dtBackup.Rows)
                {
                    int aux_estaTurno = 0;
                    Turno NewTurno = new Turno();
                    
                    NewTurno.horaInicio = Convert.ToInt32(row["tur_hora_inicio"]);
                    NewTurno.horaFin = Convert.ToInt32(row["tur_hora_fin"]);
                    NewTurno.valorFicha = Convert.ToDecimal(row["tur_valor_ficha"]);
                    NewTurno.valorBandera = Convert.ToDecimal(row["tur_valor_bandera"]);
                    NewTurno.Descripcion = Convert.ToString(row["tur_descripcion"]);
                    NewTurno.Activo = Convert.ToBoolean(row["tur_activo"]);
                    NewTurno.Id = Convert.ToInt32(row["tur_id"]);
                    aux_estaTurno = NewTurno.Esta();

                    if (aux_estaTurno > 0)
                    {
                        NewTurno.Modificar();
                    }
                    else
                    {
                        NewTurno.Crear();
                    }

                   
                }
                MessageBox.Show("Cambios guardados correctamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                DatosGuardados = true;
                
               

            }
           
        }
        private bool Check_Turnos()
        {
            dtBackup.DefaultView.Sort = "tur_hora_fin ASC";
            Decimal cantHoras = 0, horaFinAnt;
            horaFinAnt = 0;
            int cantTurnos = 0;

            foreach (DataRow row in dtBackup.Rows)
            {
                        
                Decimal horaInicio = Convert.ToDecimal(row["tur_hora_inicio"]);
                Decimal horaFin = Convert.ToDecimal(row["tur_hora_fin"]);
                Decimal valorFicha = Convert.ToDecimal(row["tur_valor_ficha"]);
                Decimal valorBandera = Convert.ToDecimal(row["tur_valor_bandera"]);
                String Descripcion = Convert.ToString(row["tur_descripcion"]);
                bool Activo = Convert.ToBoolean(row["tur_activo"]);
                int id = Convert.ToInt32(row["tur_id"]);

                if (Activo == false)
                {
                    horaInicio = 0;
                    horaFinAnt = horaFin;
                    continue;
                }
                if (horaFin - horaInicio > 24)
                {
                    MessageBox.Show("El turno tiene ser de menos de 24 horas", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
                if (horaInicio > horaFin)
                {
                    MessageBox.Show("El turno tiene que comenzar y finalizar en el mismo día", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }

                if (horaInicio != 0 && horaFinAnt != horaInicio)
                {
                    MessageBox.Show("Los turnos no deben superponerse entre si", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return false;
                }
                horaFinAnt = horaFin;
                cantHoras = cantHoras + (horaFin - horaInicio);
                cantTurnos++;
     
            }
            if (cantTurnos > 1 && cantHoras != 24)
            {
                MessageBox.Show("Los turnos tienen que completar las 24 horas del día.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;
            }
            else if (cantTurnos == 0)
            {
                MessageBox.Show("Tiene que haber al menos un turno disponible.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;

            }


            return true;
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if (grdTurnos.SelectedRows.Count < 0) MyTurno = null;
            
            this.MyTurno = new Turno((Int32)grdTurnos["tur_id", grdTurnos.SelectedRows[0].Index].Value);
            this.DialogResult = DialogResult.OK;
        }

       
        
       
       
    }
}

